# -*- coding: utf-8 -*-
from PyQt4 import QtGui
import re
from Bauteilkiste.UIClasses import UILagerinformationen
from Bauteilkiste.Modules import Datenbank, Settings
from time import time

class UIInputDialog(QtGui.QDialog):    
    
    inputs = {} # Hier muessen!! alle Inputelemente drin liegen die fuer das Bauteil vorgesehen sind
    tableName = None # Hier muss der Name fuer die Datenbank stehen, der aus UILagertabelle uebergeben wird
    numberFields = [] # Hier die Namen der Inputs die auf checkNumber geprueft werden sollen
    labels = {}
    
    def __init__(self, parent=None):
        QtGui.QDialog.__init__(self, parent)
        
        ################################################
        ####Allgemeine Widgets##########################
        ################################################
        
        self.lagerinformationen = UILagerinformationen.UILagerinformationen()
        
        self.labels["Bauform"] = QtGui.QLabel("Bauform")
        self.inputs["Bauform"]  = QtGui.QComboBox()
        for l in ["DIL", "SMD"]:
            self.inputs["Bauform"].addItem(l)
    
        self.buttonAccept = QtGui.QPushButton("Übernehmen")
        self.buttonReject = QtGui.QPushButton("Abbrechen")

        ################################################
        #####Eigenschaften / Events#####################
        ################################################

        self.UID = int(time())
        
        self.inputs["Bauform"].setEditable(True)
        
        self.buttonAccept.clicked.connect(self.speichern)
        self.buttonReject.clicked.connect(self.close)
        
        self.setWindowIcon(QtGui.QIcon('./img/resistor.png'))
        
        
    def checkNumber(self):
        for input in self.numberFields:
            self.inputs[input].setText(re.sub('\,', ".", str(self.inputs[input].text())))
            if re.search('[^0-9\.\,]', self.inputs[input].text()):
                self.inputs[input].setText("")
                
    def insertData(self, data):
        self.UID = data["UID"]
        for item in self.inputs:
            
            if self.inputs[item].inherits('QLineEdit') or self.inputs[item].inherits('QTextEdit'):
                self.inputs[item].setText(data[item])
            
            elif self.inputs[item].inherits('QComboBox'):
                self.setComboBoxValue(self.inputs[item], data[item])

        self.lagerinformationen.inputs["Menge"].setValue(int(data["Menge"]))
        self.lagerinformationen.inputs["Preis"].setValue(float(data["Preis"]))
        self.lagerinformationen.inputs["Reichelt"].setText(data["Reichelt"])
        self.lagerinformationen.inputs["Notizen"].setText(data["Notizen"])
        
    def setComboBoxValue(self, comboBox, date):
        #Gehe alle vorhanden Werte durch und eraenze falls aktueller nicht vorhanden
        found = False
        for l in range(comboBox.__len__()):
            if date == comboBox.itemText(l):
                found = True
                comboBox.setCurrentIndex(l)
                break
        if found == False:
            comboBox.addItem(date)
            comboBox.setCurrentIndex(comboBox.__len__()-1)
    
    def getValueFromWidget(self, widget):
        val = None
        
        if widget.inherits("QLineEdit"):
            val = widget.text()
        elif widget.inherits("QTextEdit"):
            val = widget.toPlainText()
        elif widget.inherits("QComboBox"):
            val = widget.currentText()
        elif widget.inherits("QSpinBox") or widget.inherits("QDoubleSpinBox"):
            val = widget.value()
        else:
            print( "ich habe ein Elementen IF vergessen 2")
    
        return val
    
    def createSQLUpdateValues(self, inputs):
        updateSQL = ""
        for key in inputs:
            updateSQL += key+'="'+str(self.getValueFromWidget(inputs[key]))+'",'
        return updateSQL
    
    def createSQLInsertValues(self):
        insertSQL = ""
        s = Settings.Settings()
        for tbl in s.settings["tables"]:
            if tbl[0] == self.tableName:
                for key in tbl[1]:
                    if key != "UID":
                        try:
                            insertSQL += '"'+str(self.getValueFromWidget(self.inputs[key]))+'",'
                        except KeyError:
                            insertSQL += '"'+str(self.getValueFromWidget(self.lagerinformationen.inputs[key]))+'",'
                    else:
                        insertSQL += '"'+str(self.UID)+'",'
                break
        
        return insertSQL
    
    def speichern(self):

        db = Datenbank.Datenbank()
        
        #Check ob schon Daten fuer Bauteil vorhanden
        db.cursor.execute('SELECT * FROM "main"."'+self.tableName+'" WHERE UID="'+str(self.UID)+'"')
        
        #Falls daten schon vorhanden
        if len(db.cursor.fetchall()) > 0:
            updateSQL = 'UPDATE "main"."'+self.tableName+'" SET '
            updateSQL += self.createSQLUpdateValues(self.inputs)
            updateSQL += self.createSQLUpdateValues(self.lagerinformationen.inputs)
            updateSQL = re.sub("\,\Z", "", updateSQL)            
            updateSQL += ' WHERE UID="'+str(self.UID)+'"'
            db.cursor.execute(updateSQL)
        else:
            insertSQL = 'INSERT INTO "main"."'+self.tableName+'" VALUES ('
            insertSQL += self.createSQLInsertValues()
            insertSQL = re.sub("\,\Z", "", insertSQL)
            insertSQL += ')'
            db.cursor.execute(insertSQL)
        
        db.connection.commit()

        try:
            self.parent().reloadTable()
        except:
            print( "Beschwer dich beim Programmierer")

        self.close()

    